home *** CD-ROM | disk | FTP | other *** search
-
-
-
- #ifndef __ABSTRACTITERATOR__
- #define __ABSTRACTITERATOR__
-
- //
- // MoreAEM is needed for declaration of TDescriptor
- //
- #include "MoreAEM.h"
-
- //
- // Iteration direction
- //
- enum
- {
- kForwardIteration = 0,
- kBackwardIteration
- };
-
- class TAbstractScriptableObject;
- class TAbstractCollector;
- class TAbstractSearchSpec;
- class TAETransaction;
-
- //========================================================================================
- // Class TAbstractObjectIterator
- //========================================================================================
- class TAbstractObjectIterator
- {
- public:
- virtual ~TAbstractObjectIterator();
-
- //
- // Call Release to free an iterator; this way, subclasses of
- // TAbstractObjectIterator may be reference-counted, if desired.
- // It would be nice to make ~TAbstractObjectIterator protected
- // to prevent clients from calling 'delete' directly, but
- // that also prevents instantiation of stack-based iterators,
- // which isn't good.
- //
- virtual void Release();
-
- //
- // Interface to code to:
- //
- virtual void Reset(const TAETransaction& t, Boolean iterationDirection = kForwardIteration) = 0;
- virtual Boolean More(const TAETransaction&) const = 0;
- virtual void Next(const TAETransaction&) = 0;
- virtual TAbstractScriptableObject* Current(const TAETransaction&) = 0;
- virtual void RemoveCurrent(const TAETransaction&); // Default implementation fails
-
- //
- // Need to rename this routine
- //
- virtual Boolean Contains(const TAETransaction& t, TAbstractScriptableObject* objectToTestForMembership);
-
- //
- // Override these methods to improve performance:
- //
- virtual Boolean CurrentDerivedFromOSLClass(const TAETransaction& t, DescType objectClass);
- virtual long CountElements(const TAETransaction& t, DescType desiredClass);
- virtual TAbstractScriptableObject* GetIndexedElement(const TAETransaction& t, DescType desiredClass, long index);
- virtual TAbstractScriptableObject* GetNamedElement(const TAETransaction& t, DescType desiredClass, TDescriptor nameDesc);
- virtual void AccessBySearchSpec(const TAETransaction& t, TAbstractCollector* collector, DescType desiredClass, TAbstractSearchSpec* searchSpec);
- virtual void SearchDeep(const TAETransaction& t, TAbstractCollector* collector, DescType desiredClass, TAbstractSearchSpec* searchSpec);
- void RecursiveSearchDeep(const TAETransaction& t, TAbstractCollector* collector, DescType desiredClass, TAbstractSearchSpec* searchSpec);
- };
-
- //========================================================================================
- // Class TSingleObjectIterator
- //========================================================================================
- class TSingleObjectIterator : public TAbstractObjectIterator
- {
- private:
- TAbstractScriptableObject* fObject;
- TAbstractScriptableObject* fCurrent;
-
- public:
- virtual ~TSingleObjectIterator();
- TSingleObjectIterator(TAbstractScriptableObject* object) : fObject(object), fCurrent(object) {}
-
- //
- // Interface to code to:
- //
- virtual void Reset(const TAETransaction& t, Boolean iterationDirection = kForwardIteration);
- virtual Boolean More(const TAETransaction&) const;
- virtual void Next(const TAETransaction&);
- virtual TAbstractScriptableObject* Current(const TAETransaction&);
-
- //
- // Performance enhancement:
- //
- virtual long CountElements(const TAETransaction& t, DescType desiredClass);
- virtual TAbstractScriptableObject* GetIndexedElement(const TAETransaction& t, DescType desiredClass, long index);
- };
-
- //========================================================================================
- // CLASS TCollectionIterator
- //========================================================================================
-
- class TCollectionIterator : public TAbstractObjectIterator
- {
- private:
- TAbstractObjectIterator** fIterCollection;
- long fItersInCollection;
- long fCollectionSize;
- long fCurrentIter;
- Boolean fDirection;
-
- public:
- virtual ~TCollectionIterator();
- TCollectionIterator() :
- fIterCollection(nil),
- fItersInCollection(0),
- fCollectionSize(0),
- fCurrentIter(0),
- fDirection(kForwardIteration) {}
-
- void AddIterator(TAbstractObjectIterator* iter);
- void AddObject(const TAETransaction& t, TAbstractScriptableObject* object);
- void AddElementsOfObject(const TAETransaction& t, TAbstractScriptableObject* object);
- TAbstractObjectIterator* CurrentIterator() const;
-
- //
- // Interface to code to:
- //
- virtual void Reset(const TAETransaction& t, Boolean iterationDirection = kForwardIteration);
- virtual Boolean More(const TAETransaction&) const;
- virtual void Next(const TAETransaction&);
- virtual TAbstractScriptableObject* Current(const TAETransaction&);
-
- //
- // Performance enhancement:
- //
- virtual Boolean CurrentDerivedFromOSLClass(const TAETransaction& t, DescType objectClass);
- virtual void SearchDeep(const TAETransaction& t, TAbstractCollector* collector, DescType desiredClass, TAbstractSearchSpec* searchSpec);
- };
-
- #endif
-